let queue = [];
let callbacks = [];
let state = { count: 0 }
function setState(newState,callback) {
    queue.push(newState);
    callbacks.push(callback);
}
function handleClick() {
    setState((state) => ({ count: state.count + 1 }), () => {
        //此回调函数是在状态变更之后执行
        console.log('callback1', state.count)
    })
    setState((state) => ({ count: state.count + 1 }), () => {
        //此回调函数是在状态变更之后执行
        console.log('callback2', state.count)
    })
}
handleClick();
queue.forEach((newState) => {
    //其实在状态计算的，对新旧状态对象属性会进行合并操作
    //如果此状态新老都有，则覆盖，如果新的有老的没有，则添加，如果新的没有，老有的，则不变
    //从此角度来说无法真正删除state中的属性，只能把它设置为null值
    //newState不但可以是一个对象，还可能是一个计算函数，可以通过老状态计算新状态
    //判断如果新状态是一个计算函数
    if (typeof newState === 'function') {
        //调用此计算函数，并且传入老状态，计算出新状态
        newState = newState(state);
    }
    //再合并老的和新的状态
    state = { ...state, ...newState };
});
callbacks.forEach(callback=>callback())
console.log(state)